# -*- coding: utf-8 -*-
# @Time    : 2022/1/21 15:37
# @Author  : Mr.Ye
# @Email   : a3289748713@163.com
# @File    : demo.py
# @Software: PyCharm

class cal:
    cal_name = '看完你就懂啦！'

    def __init__(self, x, y):
        self.x = x
        self.y = y

    # 方法变属性变量
    @property  # 在cal_add函数前加上@property，使得该函数可直接调用，封装起来
    def cal_add(self):
        # cal.cal_test(1, 2, 3)
        return self.x + self.y

    @classmethod  # 在cal_info函数前加上@classmethon，则该函数变为类方法，该函数只能访问到类的数据属性，不能获取实例的数据属性
    def cal_info(cls):  # python自动传入位置参数cls就是类本身
        print('这是一个%s' % cls.cal_name)  # cls.cal_name调用类自己的数据属性

    @staticmethod  # 静态方法 类或实例均可调用
    def cal_test(a, b, c):  # 改静态方法函数里不传入self 或 cls
        print(a, b, c)


c1 = cal(10, 11)
# 类静态调用
cal.cal_test(1, 2, 3)  # >>> 1 2 3
# 调用类属性
c1.cal_info()
# 实例静态调用 相当于 在__init__方法中调用该方法 -> __init__方法其实是一个实例化类的对象方法
c1.cal_test(1, 2, 3)  # >>> 1 2 3
# 函数变为属性，直接调用输出结果
print(c1.cal_add)
